Skip to content

test(ske/starterkit): smoke test the deployed SKE StarterKit - #11

Merged
JohannesRudolph merged 5 commits into
mainfrom
claude/ske-starterkit-smoke-test
Sep 8, 2026
Merged

test(ske/starterkit): smoke test the deployed SKE StarterKit#11
JohannesRudolph merged 5 commits into
mainfrom
claude/ske-starterkit-smoke-test

Conversation

@JohannesRudolph

@JohannesRudolph JohannesRudolph commented Sep 3, 2026

Copy link
Copy Markdown
Member

Smoke tests the SKE StarterKit as this foundation has published it: an ephemeral building block
ordered against the deployed definition, asserting the run SUCCEEDED and that both app endpoints
answer HTTP 200 over a valid, cert-manager-issued certificate.

The precedent is likvid-cloudfoundation; the companion PR there is
likvid-bank/likvid-cloudfoundation#215.

Builds on meshcloud/meshstack-hub#304, now merged — the hub ref pinned here is 247a4a6a on
hub main, so this PR stands on its own.

Why the StarterKit

It is what trial users actually try, and the chain behind it is long: two meshProjects, two SKE
tenants, a Forgejo repository, a pipeline run, and a cert-manager certificate. A hub-side test
proves a fresh deployment works. Nothing proved that the definition this foundation has
deployed
still produces an app that serves traffic.

What

Five commits, smallest first:

  1. refactor — move the hub coordinates out of terragrunt.hcl into hub.hcl, so the deployment
    and the e2e unit share one ref. No behaviour change.
  2. chore — bump that ref to the hub commit that makes ske/ske-starterkit/e2e dual-mode. This
    redeploys the three BBDs at the newer hub ref.
  3. test — add starterkit/e2e/ and the e2e output it reads.
  4. docs — add AGENTS.md (+ CLAUDE.md symlink). See below.
  5. test — drop that output again, and the state dependency behind it. See below.

Running it needs the meshStack API key and nothing else

Commits 3 and 4 are worth reading as a pair. The e2e unit originally took bbd_version_ref from
dependency.deployment.outputs.e2e, and terragrunt has to evaluate the deployment unit to read
that — dragging in its STACKIT credentials, its state backend and the whole dependency graph for one
uuid. Reading that state is also more access than a smoke test should have: it holds the SKE
kubeconfig and the Forgejo and Harbor secrets.

The hub's foundation mode now finds the published definition through the meshStack API itself, so
the unit only spells out static facts: workspace, bbd_draft and a fresh name suffix. No
dependency, no state, no cloud credential.

export MESHSTACK_STARTER_KIT_API_KEY_ID=... MESHSTACK_STARTER_KIT_API_KEY_SECRET=...
cd foundations/meshstack-trial/platforms/ske/starterkit/e2e && terragrunt test

python3 must be on PATH for the endpoint probe.

AGENTS.md, and why it earns its place in this PR

This repo had no agent instructions at all, which is how the e2e units ended up explaining the hub
e2e protocol to themselves in comments. AGENTS.md links the public
likvid-cloudfoundation for the shared
conventions and states only what actually differs here — a different meshStack, its own Vault
secret, no CI. CLAUDE.md is a symlink to it, matching likvid. The e2e comments are then trimmed to
pointers.

It also records a credential quirk worth knowing: setup-env.sh exports every key in
concourse/meshstack-dev/trial-cloudfoundation, and the ske units read the meshStack API key
id from MESHSTACK_STARTER_KIT_API_KEY_ID rather than committing it. The rest of this repo (and
all of likvid) commits the id and takes only the secret from the environment. A key id is not a
secret, so this is inconsistency rather than intent — worth aligning one day, but not while it is
load-bearing for three units.

Frequency

This repo has no CI, so the test is run on demand — but that is now a much smaller gap than it was:
foundations/meshstack-trial/smoke.hcl holds the shared scaffolding and is the marker
likvid-cloudfoundation's .github/workflows/smoke-test.yml discovers smoke tests by, so cloning
that workflow when this repo gets CI is the whole job, with no per-case wiring.

Keeping it on demand for now is also deliberate: each run consumes a Let's Encrypt certificate for a
fresh hostname, a rate-limited quota — the same reason this case is nightly-only rather than hourly
in meshcloud/meshstack-smoke-test.

Verification

Config-only. terragrunt hcl fmt --check and tofu fmt -check pass, and terragrunt render on the
e2e unit reports dependencies: null with
{"mode":"foundation","workspace":"meshcloud","bbd_draft":false,"name_suffix":…} — resolved with no
credentials beyond two dummy env vars. terragrunt init at the pinned hub ref installs
modes/foundation only. The live run is still outstanding — it needs the real API key pair.

🤖 Generated with Claude Code

The e2e smoke test unit added next needs the same hub ref the deployment uses,
and terragrunt can only share that through an included file. No behaviour
change: the ref and draft flag are unchanged, and `module` is new but only read
by e2e/.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
JohannesRudolph and others added 2 commits September 8, 2026 10:56
meshcloud/meshstack-hub#304 makes ske/ske-starterkit/e2e usable in foundation
mode. The e2e unit sources the hub at the deployed ref, so the deployment has to
move first.

NOTE: pins the PR branch head. Re-pin to the squashed main commit before merge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The starter kit is what trial users actually try, and the chain behind it is
long: meshProjects, SKE tenants, a Forgejo repository, a pipeline run and a
cert-manager certificate. Nothing here verified that the deployed definition
still produces a working app.

Add an e2e unit next to the deployment: it sources the hub e2e module at the
deployed ref and runs it in foundation mode, so it orders an ephemeral building
block against the BBD this unit deployed rather than building its own. The hub
test then asserts both app endpoints answer 200 over a valid, cert-manager-issued
certificate.

Run it with `terragrunt test` in e2e/, after `source setup-env.sh`. Each run
consumes a Let's Encrypt certificate for a fresh hostname, which is a
rate-limited quota — so run it deliberately, not on a tight schedule.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@JohannesRudolph
JohannesRudolph force-pushed the claude/ske-starterkit-smoke-test branch 2 times, most recently from 356d030 to 860d9e4 Compare September 8, 2026 19:04
JohannesRudolph and others added 2 commits September 8, 2026 21:17
This repo had no agent instructions at all, so every convention it shares with
likvid-cloudfoundation had to be rediscovered here — or restated in comments, which is
how the e2e units ended up explaining the hub protocol to themselves.

Rather than fork that documentation, say what actually differs — a different meshStack
(try.meshstack.io), its own Vault secret, no CI — and link the public likvid repo for
the rest. CLAUDE.md is a symlink, matching likvid.

Also records the one credential quirk worth knowing: the `ske` units read the
meshStack API key *id* from the environment, where the rest of this repo and all of
likvid commit it. A key id is not a secret, so that is inconsistency rather than
intent.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… deployment's state

The e2e unit took `bbd_version_ref` from `dependency.deployment.outputs.e2e`, so
terragrunt had to evaluate the deployment unit to read it — dragging in that unit's
STACKIT credentials, its state backend and the whole dependency graph for one uuid.
Reading that state is also more access than a smoke test should have: it holds the
kubeconfig and the Forgejo and Harbor secrets.

The hub's foundation mode now finds the definition through the meshStack API itself
(meshcloud/meshstack-hub#304), so this unit only spells out the static facts it
needs: workspace, `bbd_draft` and a fresh name suffix. Running the smoke test is down
to `MESHSTACK_STARTER_KIT_API_KEY_ID` and `_SECRET` — nothing else.

`smoke.hcl` holds what every smoke test in this foundation shares. This repo has no
CI, so nothing discovers it yet; when CI arrives, likvid-cloudfoundation's
`smoke-test.yml` selects exactly the units that include it, so cloning that workflow
is the whole job. `starterkit/outputs.tf` goes with the dependency it existed to feed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@JohannesRudolph
JohannesRudolph force-pushed the claude/ske-starterkit-smoke-test branch from 860d9e4 to f05416c Compare September 8, 2026 19:18
@JohannesRudolph
JohannesRudolph marked this pull request as ready for review September 8, 2026 19:19
@JohannesRudolph
JohannesRudolph merged commit 47cf6b4 into main Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant